新的计时系统Time Sources

以前在 GameMaker 里需要用到计时器的话要么用自带的alarm,缺点是有数量限制最多只能 12 个,要么得自己写个方法去处理,要说有多不方便,可能也谈不上,但也实在算不上好用,于是在前两个月 YoYo 引入了 TIme Sources,一套全新的计时系统,更为灵活,简单介绍一下吧。

这是文档里的流程图,应该还算清楚,基本上使用流程就是:

  • 通过 create 函数创建 TS(TIme Sources)
  • 通过 start 函数启动 TS
  • 判断是否达到创建时设定的时间
  • 到时间触发后自动调用设置的回调函数(可以为方法函数)
  • 看是否设置了循环计时,若有则从第三步开始循环判断,若无则结束

然后看一下创建一个 Time Source 到底可以传入哪些参数

参数 类型 描述
parent Time Source ID 父级 TS,系统自带 time_source_game 和 time_sorce_global 两个,后者无法暂停
period Real 计时器的时间跨度,根据后续设定的单位计时
units Time Source Unit Constant 计时单位,可以按秒或帧两种模式
callback Method or Script Function 计时器触发的回调函数
args Array 可选参数,一个数组,作为参数传给回调函数
repetitions Real 可选参数,设置计时器的循环次数,设为-1 则为无限循环
expiry_type Time Source Expiry Constant 可选参数,设置计时器是在计时结束后最近的一帧触发(如果结束在帧间需要判断是在前一帧还是后一帧)还是等结束后一帧触发

示例:

time_source = time_source_create(time_source_game, 300, time_source_units_frames, shot);

上述就是创建了一个继承内置time_source_game的配制,然后以帧为单位计时 300 帧后触发调用一个shot 方法函数的计时器

var shot = function {
    instance_create_depth(x,y,0,o_bullet)
}

那调用这样一个方法函数就可以每 300 帧发射一颗子弹,完成自动发射子弹的操作。

并且 Time Sources 还有相对丰富的控制函数可以继承、修改、判断状态等等,因此在使用上会更为灵活

time_source_create
time_source_destroy
time_source_start
time_source_stop
time_source_pause
time_source_resume
time_source_reconfigure
time_source_reset
time_source_get_children
time_source_get_parent
time_source_get_period
time_source_get_reps_completed
time_source_get_reps_remaining
time_source_get_state
time_source_get_time_remaining
time_source_get_units
time_source_exists

以及在 Beta 版里还引入了更灵活的两个函数

call_later()
call_cancel()

call_later(period, units, func, [loop=false])

可以更方便处理一些简单的计时操作

2022-08-23 23:16
Comments
Write a Comment